home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Communication / NGService / Source / Controller.m < prev    next >
Text File  |  1993-06-02  |  3KB  |  162 lines

  1. /*
  2.  *      You may freely copy, distribute and reuse the code
  3.  *      in this example.  Scott Anguish disclaims any warranty of
  4.  *      any kind, expressed or implied, as to its fitness
  5.  *      for any particular use.
  6.  *        Please keep this notice intact
  7.  *      Written by: Scott Anguish  sanguish@digifix.com
  8.  */
  9.  
  10. #import <appkit/appkit.h>
  11.  
  12. #import <streams/streams.h>
  13.  
  14. #import    <stdio.h> 
  15.  
  16. #import "Controller.h"
  17. #import "MMCell.h"
  18. #import "MMFolderCell.h"
  19. #import "MMDocumentCell.h"
  20. #import "MMGraphicCell.h"
  21. #import "MMText.h"
  22.  
  23. @implementation Controller
  24.  
  25. + new
  26. {
  27.     self = [super new];
  28.     OpenPanelObject = [OpenPanel new];
  29.     [OpenPanelObject allowMultipleFiles:NO];
  30.     [NXApp setDelegate:self];
  31.     return(self);
  32. }
  33.  
  34. - init
  35. {
  36.     [super init];
  37.     return self;
  38. };
  39.  
  40.  
  41. - free
  42. {
  43.     [OpenPanelObject free];
  44.     [super free];
  45.     return(self);
  46. }
  47.       
  48. -(int)appOpenFile:(char *)fileName type:(char *)fileType
  49. {
  50.     char tempfilename[1024];
  51.     [self replaceText];
  52.     [[myScrollView window] makeKeyAndOrderFront: nil];
  53.  
  54.     strcpy(tempfilename, fileName);
  55.     [[myScrollView docView] openFileName:tempfilename ignoreHeader:YES];
  56.     return YES;
  57. }
  58.  
  59.  
  60. - (BOOL)appAcceptsAnotherFile:sender
  61. {
  62.     return YES;
  63. }
  64.  
  65.  
  66. - print:sender
  67. {
  68.     [[myScrollView docView] printPSCode:self];
  69.     return self;
  70. };
  71.  
  72.  
  73. - appDidInit:sender
  74. {
  75.     
  76.     [[NXApp appListener] setServicesDelegate: self];
  77.     [self replaceText];
  78.     [[myScrollView window] makeKeyAndOrderFront: nil];
  79.  
  80.     return self;
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87. - replaceText
  88. {
  89.     
  90.     NXStream *s = (NXStream *)nil;
  91.     id        stdDoc, newDoc;
  92.     NXRect    r;
  93.         
  94.     /* Measure the old doc view, then trash it. */
  95.     stdDoc = [myScrollView docView];
  96.     [stdDoc getFrame:&r];
  97.  
  98.     /* Get the entire text, using the rich RTF format */
  99.     s = NXOpenMemory(NULL, 0, NX_READWRITE);
  100.     if (s)   [stdDoc writeRichText: s];
  101.  
  102.     [myScrollView setVertScrollerRequired:YES];
  103.     [myScrollView setHorizScrollerRequired:NO];
  104.     [myScrollView setDynamicScrolling:YES]; 
  105.     
  106.     newDoc = [[MMText alloc] initFrame:&r];
  107.     [newDoc moveTo:0.0:0.0];
  108.     [newDoc notifyAncestorWhenFrameChanged: YES];
  109.     [newDoc setVertResizable:YES];
  110.     [newDoc setSelectable:YES];
  111.     [newDoc setEditable: NO];
  112.     [newDoc setAutosizing:NX_WIDTHSIZABLE];
  113.     [newDoc setMinSize:&r.size];
  114.     [newDoc setMonoFont:NO];
  115.     r.size.height = 1.0e30;
  116.     [newDoc setMaxSize:&r.size];
  117.     [myScrollView setDocView:newDoc];
  118.     [stdDoc free];
  119.     
  120.     /* Stick the text from the original doc into the new doc */
  121.     if (s)
  122.     {
  123.         /* Rewind to the beginning of the stream */
  124.         NXSeek(s, 0L, NX_FROMSTART);
  125.         [newDoc readRichText:s];
  126.         NXCloseMemory(s, NX_FREEBUFFER);
  127.     }
  128.  
  129.     return self;
  130. }
  131.  
  132. - msgOpen:(id)pbid userData:(const char *)udata error:(char **)errmsg
  133. {
  134.     char *data; 
  135.     int   length;
  136.     const char *const *types;
  137.     int   hasAscii, i;
  138.     
  139.         types = [pbid types];        /* get a list of pasteboard types */
  140.         hasAscii = 0;
  141.         for(i=0; !hasAscii && types[i]; i++)
  142.             if(!strcmp(types[i], NXAsciiPboardType)) hasAscii = 1;
  143.         if(hasAscii)
  144.         {
  145.             [pbid readType:NXAsciiPboardType data:&data length:&length];
  146.             if(data && length)
  147.             {
  148.             
  149.             [[myScrollView docView] readFromMemory:data length:length];
  150.             
  151.             } /* end if(data && length) */
  152.             else
  153.             *errmsg = "Selection is empty.";
  154.             vm_deallocate(task_self(), data, length);
  155.         }  /* end if(hasAscii) */
  156.         else
  157.             *errmsg = "No NG text found in your selection.";
  158.         return self;
  159. }
  160.  
  161. @end
  162.